// This example shows how to acknowledge an event condition in the OPC server. using System; using System.Threading; using OpcLabs.EasyOpc.AlarmsAndEvents; using OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.OperationModel; namespace DocExamples.AlarmsAndEvents._EasyAEClient { class AcknowledgeCondition { // Instantiate the OPC-A&E client object. static readonly EasyAEClient AEClient = new EasyAEClient(); // Instantiate the OPC-DA client object. static readonly EasyDAClient DAClient = new EasyDAClient(); static volatile bool _done; public static void Main1() { var eventHandler = new EasyAENotificationEventHandler(AEClient_Notification); AEClient.Notification += eventHandler; Console.WriteLine("Processing event notifications for 1 minute..."); var subscriptionFilter = new AESubscriptionFilter { Sources = new AENodeDescriptor[] { "Simulation.ConditionState1" } }; int handle = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, null, subscriptionFilter); // Give the refresh operation time to complete Thread.Sleep(5 * 1000); // Trigger an acknowledgeable event try { DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", true); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } _done = false; DateTime endTime = DateTime.Now + new TimeSpan(0, 0, 5); while ((!_done) && (DateTime.Now < endTime)) Thread.Sleep(1000); // Give some time to also receive the acknowledgement notification Thread.Sleep(5 * 1000); AEClient.UnsubscribeEvents(handle); AEClient.Notification -= eventHandler; } // Notification event handler static void AEClient_Notification(object sender, EasyAENotificationEventArgs e) { Console.WriteLine(); if (!e.Succeeded) { Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief); return; } Console.WriteLine("Refresh: {0}", e.Refresh); Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete); AEEventData eventData = e.EventData; if (!(eventData is null)) { Console.WriteLine("Event.QualifiedSourceName: {0}", eventData.QualifiedSourceName); Console.WriteLine("Event.Message: {0}", eventData.Message); Console.WriteLine("Event.Active: {0}", eventData.Active); Console.WriteLine("Event.Acknowledged: {0}", eventData.Acknowledged); Console.WriteLine("Event.AcknowledgeRequired: {0}", eventData.AcknowledgeRequired); if (eventData.AcknowledgeRequired) { Console.WriteLine(">>>>> ACKNOWLEDGING THIS EVENT"); try { AEClient.AcknowledgeCondition("", "OPCLabs.KitEventServer.2", "Simulation.ConditionState1", "Simulated", eventData.ActiveTime, eventData.Cookie); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); return; } Console.WriteLine(">>>>> EVENT ACKNOWLEDGED"); _done = true; } } } } }
# This example shows how to acknowledge an event condition in the OPC server. # The QuickOPC package is needed. Install it using "pip install opclabs_quickopc". import opclabs_quickopc import time # Import .NET namespaces. from OpcLabs.EasyOpc import * from OpcLabs.EasyOpc.AlarmsAndEvents import * from OpcLabs.EasyOpc.DataAccess import * from OpcLabs.EasyOpc.OperationModel import * # Notification event handler def notification(sender, e): global aeClient global done if not e.Succeeded: print('*** Failure: ', e.ErrorMessageBrief, sep='') return print('Refresh: ', e.Refresh, sep='') print('RefreshComplete: ', e.RefreshComplete, sep='') eventData = e.EventData if eventData is not None: print('EventData.QualifiedSourceName: ', eventData.QualifiedSourceName, sep='') print('EventData.Message: ', eventData.Message, sep='') print('EventData.Active: ', eventData.Active, sep='') print('EventData.ActiveTime: ', eventData.ActiveTime, sep='') print('EventData.ActiveTimeTicks: ', eventData.ActiveTimeTicks, sep='') print('EventData.Acknowledged: ', eventData.Acknowledged, sep='') print('EventData.AcknowledgeRequired: ', eventData.AcknowledgeRequired, sep='') print('EventData.Cookie: ', eventData.Cookie, sep='') if eventData.AcknowledgeRequired: print('>>>>> ACKNOWLEDGING THIS EVENT') try: IEasyAEClientExtension.AcknowledgeCondition(aeClient, '', 'OPCLabs.KitEventServer.2', 'Simulation.ConditionState1', 'Simulated', eventData.ActiveTimeTicks, eventData.Cookie, 'Myself') # acknowledgerId # The precise ActiveTime is important for event acknowledgement in OPC A&E. Python.NET, however, # represents .NET DateTime to Python 'datetime' object, possibly losing precision. For this reason, # use AEEventData.ActiveTimeTicks (as above), and not AEEventData.ActiveTime. # aeClient.AcknowledgeCondition('', 'OPCLabs.KitEventServer.2', # 'Simulation.ConditionState1', 'Simulated', # eventData.ActiveTime, eventData.Cookie) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) done = True return print('>>>>> EVENT ACKNOWLEDGED') done = True # Instantiate the OPC-A&E client object. aeClient = EasyAEClient() # Instantiate the OPC-DA client object. daClient = EasyDAClient() # aeClient.Notification += notification print('Processing event notifications for 1 minute...') subscriptionFilter = AESubscriptionFilter() subscriptionFilter.Sources = [AENodeDescriptor('Simulation.ConditionState1')] handle = IEasyAEClientExtension.SubscribeEvents(aeClient, '', 'OPCLabs.KitEventServer.2', 1000, None, subscriptionFilter) # Give the refresh operation time to complete. time.sleep(5) # Trigger an acknowledgeable event. done = False try: IEasyDAClientExtension.WriteItemValue(daClient, '', 'OPCLabs.KitServer.2', 'SimulateEvents.ConditionState1.Activate', True) except OpcException as opcException: print('*** Failure: ' + opcException.GetBaseException().Message) exit() endTime = time.time() + 60 while (not done) and (time.time() < endTime): time.sleep(1) # Give some time to also receive the acknowledgement notification. time.sleep(5) aeClient.UnsubscribeAllEvents() aeClient.Notification -= notification print('Finished.')
' This example shows how to acknowledge an event condition in the OPC server. Imports System.Threading Imports OpcLabs.EasyOpc.AlarmsAndEvents Imports OpcLabs.EasyOpc.AlarmsAndEvents.OperationModel Imports OpcLabs.EasyOpc.DataAccess Imports OpcLabs.EasyOpc.OperationModel Namespace AlarmsAndEvents._EasyAEClient Friend Class AcknowledgeCondition _ Private Shared ReadOnly AEClient As New EasyAEClient() _ Private Shared ReadOnly DAClient As New EasyDAClient() Private Shared _done As Boolean ' volatile Public Shared Sub Main1() Dim eventHandler = New EasyAENotificationEventHandler(AddressOf AEClient_Notification) AddHandler AEClient.Notification, eventHandler Console.WriteLine("Processing event notifications for 1 minute...") Dim subscriptionFilter As New AESubscriptionFilter subscriptionFilter.Sources = New AENodeDescriptor() {"Simulation.ConditionState1"} Dim handle As Integer = AEClient.SubscribeEvents("", "OPCLabs.KitEventServer.2", 1000, Nothing, subscriptionFilter) ' Give the refresh operation time to complete Thread.Sleep(5 * 1000) ' Trigger an acknowledgeable event Try DAClient.WriteItemValue("", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True) Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try _done = False Dim endTime As Date = Date.Now + New TimeSpan(0, 0, 5) Do While ((Not _done)) AndAlso (Date.Now < endTime) Thread.Sleep(1000) Loop ' Give some time to also receive the acknowledgement notification Thread.Sleep(5 * 1000) AEClient.UnsubscribeEvents(handle) RemoveHandler AEClient.Notification, eventHandler End Sub ' Notification event handler Private Shared Sub AEClient_Notification(ByVal sender As Object, ByVal e As EasyAENotificationEventArgs) Console.WriteLine() If Not e.Succeeded Then Console.WriteLine("*** Failure: {0}", e.ErrorMessageBrief) Exit Sub End If Console.WriteLine("Refresh: {0}", e.Refresh) Console.WriteLine("RefreshComplete: {0}", e.RefreshComplete) If e.EventData IsNot Nothing Then Dim eventData As AEEventData = e.EventData Console.WriteLine("EventData.QualifiedSourceName: {0}", eventData.QualifiedSourceName) Console.WriteLine("EventData.Message: {0}", eventData.Message) Console.WriteLine("EventData.Active: {0}", eventData.Active) Console.WriteLine("EventData.Acknowledged: {0}", eventData.Acknowledged) Console.WriteLine("EventData.AcknowledgeRequired: {0}", eventData.AcknowledgeRequired) If eventData.AcknowledgeRequired Then Console.WriteLine(">>>>> ACKNOWLEDGING THIS EVENT") Try AEClient.AcknowledgeCondition("", "OPCLabs.KitEventServer.2", "Simulation.ConditionState1", "Simulated", eventData.ActiveTime, eventData.Cookie) Catch opcException As OpcException Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message) Exit Sub End Try Console.WriteLine(">>>>> EVENT ACKNOWLEDGED") _done = True End If End If End Sub End Class End Namespace
Rem This example shows how to acknowledge an event condition in the OPC server. Option Explicit Dim DAClient: Set DAClient = CreateObject("OpcLabs.EasyOpc.DataAccess.EasyDAClient") Dim AEClient: Set AEClient = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.EasyAEClient") WScript.Echo "Hooking event handler..." WScript.ConnectObject AEClient, "AEClient_" Dim ServerDescriptor: Set ServerDescriptor = CreateObject("OpcLabs.EasyOpc.ServerDescriptor") ServerDescriptor.ServerClass = "OPCLabs.KitEventServer.2" Dim SourceDescriptor: Set SourceDescriptor = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AENodeDescriptor") SourceDescriptor.QualifiedName = "Simulation.ConditionState1" WScript.Echo "Processing event notifications for 1 minute..." Dim SubscriptionParameters: Set SubscriptionParameters = CreateObject("OpcLabs.EasyOpc.AlarmsAndEvents.AESubscriptionParameters") SubscriptionParameters.Filter.Sources = Array(SourceDescriptor) SubscriptionParameters.NotificationRate = 1000 Dim handle: handle = AEClient.SubscribeEvents(ServerDescriptor, SubscriptionParameters, True, Nothing) WScript.Echo "Give the refresh operation time to complete: Waiting for 5 seconds..." WScript.Sleep 5*1000 WScript.Echo "Triggering an acknowledgeable event..." On Error Resume Next DAClient.WriteItemValue "", "OPCLabs.KitServer.2", "SimulateEvents.ConditionState1.Activate", True If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description WScript.Quit End If On Error Goto 0 Dim done: done = False Dim endTime: endTime = Now() + 5*(1/24/60/60) While (Not done) And (Now() < endTime) WScript.Sleep 1000 WEnd WScript.Echo "Give some time to also receive the acknowledgement notification: Waiting for 5 seconds..." WScript.Sleep 5*1000 WScript.Echo "Unsubscribing events..." AEClient.UnsubscribeEvents handle WScript.Echo "Unhooking event handler..." WScript.DisconnectObject AEClient WScript.Echo "Finished." Rem Notification event handler Sub AEClient_Notification(Sender, e) If Not (e.Succeeded) Then WScript.Echo "*** Failure: " & e.ErrorMessageBrief Exit Sub End If WScript.Echo WScript.Echo "Refresh: " & e.Refresh WScript.Echo "RefreshComplete: " & e.RefreshComplete If Not (e.EventData Is Nothing) Then With e.EventData WScript.Echo "EventData.QualifiedSourceName: " & .QualifiedSourceName WScript.Echo "EventData.Message: " & .Message WScript.Echo "EventData.Active: " & .Active WScript.Echo "EventData.Acknowledged: " & .Acknowledged WScript.Echo "EventData.AcknowledgeRequired: " & .AcknowledgeRequired If .AcknowledgeRequired Then WScript.Echo ">>>>> ACKNOWLEDGING THIS EVENT" On Error Resume Next AEClient.AcknowledgeCondition ServerDescriptor, SourceDescriptor, "Simulated", _ .ActiveTime, .Cookie, "aUser", "" If Err.Number <> 0 Then WScript.Echo "*** Failure: " & Err.Source & ": " & Err.Description Exit Sub End If On Error Goto 0 WScript.Echo ">>>>> EVENT ACKNOWLEDGED" done = True End If End With End If End Sub
Copyright © 2004-2023 CODE Consulting and Development, s.r.o., Plzen. All rights reserved. Web page: www.opclabs.com
Send Documentation Feedback. Resources: Knowledge Base. Technical support: Online Forums, FAQ.